#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
综合测试所有数据生成器功能
"""

import sys
import os

# 添加项目路径
sys.path.insert(0, os.path.dirname(__file__))

from utils.data import FloatGenerator, IDGenerator

def test_all_generators():
    """测试所有数据生成器"""
    print("=== 测试所有数据生成器 ===\n")
    
    # 测试浮点数生成器
    print("1. 测试浮点数生成器:")
    float1 = FloatGenerator.generate_random_float(3, 2)
    print(f"   生成3位整数2位小数的数字: {float1}")
    
    float2 = FloatGenerator.generate_random_float_from_utils(2, 4)
    print(f"   生成2位整数4位小数的数字: {float2}")
    
    # 测试身份证号码生成器
    print("\n2. 测试身份证号码生成器:")
    id1 = IDGenerator.generate_id_number()
    print(f"   随机生成身份证号码: {id1}")
    
    id2 = IDGenerator.generate_id_number(prefix="31")
    print(f"   指定2位前缀生成身份证号码: {id2}")
    
    id3 = IDGenerator.generate_id_number(prefix="310105", age_range=[20, 30])
    print(f"   指定6位前缀和年龄范围[20,30]生成身份证号码: {id3}")
    
    # 测试带多条件的身份证号码生成（基于MD5加密后的完整数字）
    # 使用负数索引表示倒数位置
    conditions = [
        {
            "positions": [-2, -1],  # MD5后数字的倒数第2位和倒数第1位
            "range": [10, 99]       # 范围在10-99之间
        }
    ]
    try:
        id4 = IDGenerator.generate_id_number(digit_conditions=conditions)
        print(f"   生成满足条件(基于MD5加密后数字)的身份证号码: {id4}")
    except RuntimeError as e:
        print(f"   生成满足条件的身份证号码时遇到错误: {e}")
    
    # 测试同时指定前缀、年龄范围和条件
    conditions = [
        {
            "positions": [-1, -2],    # MD5后数字的倒数第1-2位
            "range": [50, 150]      # 范围在50-150之间
        },
        {
            "positions": [10, 15],    # MD5后数字的倒数第1-2位
            "range": [50, 150]      # 范围在50-150之间
        }
    ]
    try:
        id5 = IDGenerator.generate_id_number(
            prefix="11", 
            age_range=[45, 45],
            digit_conditions=conditions
        )
        print(f"   同时指定前缀、年龄范围和条件生成的身份证号码: {id5}")
    except RuntimeError as e:
        print(f"   生成满足所有条件的身份证号码时遇到错误: {e}")
    
    # 测试手机号码生成器
    print("\n3. 测试手机号码生成器:")
    mobile1 = IDGenerator.generate_mobile_number()
    print(f"   随机生成手机号码: {mobile1}")
    
    mobile2 = IDGenerator.generate_mobile_number(prefix="138")
    print(f"   指定3位前缀生成手机号码: {mobile2}")
    
    mobile3 = IDGenerator.generate_mobile_number(prefix="138123")
    print(f"   指定6位前缀生成手机号码: {mobile3}")
    
    # 测试带条件的手机号码生成（基于MD5加密后的完整数字）
    conditions = [
        {
            "positions": [-1, -2],  # MD5后数字的倒数第1位和倒数第2位
            "range": [10, 50]     # 范围在10-50之间
        }
    ]
    try:
        mobile4 = IDGenerator.generate_mobile_number(digit_conditions=conditions)
        print(f"   生成满足条件(基于MD5加密后数字)的手机号码: {mobile4}")
    except RuntimeError as e:
        print(f"   生成满足条件的手机号码时遇到错误: {e}")
    
    # 测试交易流水号生成器
    print("\n4. 测试交易流水号生成器:")
    transaction1 = IDGenerator.generate_transaction_number("TX")
    print(f"   生成交易流水号: {transaction1}")
    
    # 测试多个流水号的唯一性
    transaction_numbers = set()
    for i in range(5):
        transaction = IDGenerator.generate_transaction_number("TEST")
        transaction_numbers.add(transaction)
        print(f"   生成的流水号 {i+1}: {transaction}")
    
    print(f"   生成了 {len(transaction_numbers)} 个唯一流水号")
    
    print("\n=== 所有测试完成 ===")

if __name__ == "__main__":
    test_all_generators()